package net.beyond.common.ssh;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * 资源仓库的基类
 * 
 * @author cjk
 * @version 1.000 2008-11-23
 */
/**
 * 
 * @author Shmiluyu
 * @version 1.000 2009-3-24
 */
public interface Repository<T, PK extends Serializable> {

	/**
	 * 保存一个实体，并返回保存后的实体
	 * 
	 * @param newInstance
	 * @return
	 */
	T save(T newInstance);

	/**
	 * 根据ID从持久库中获取实体
	 * 
	 * @param id
	 * @return
	 */
	T get(PK id);

	/**
	 * 查询出所有的实体
	 * 
	 * @return
	 */
	public List<T> getAll();

	/**
	 * 更新实体
	 * 
	 * @param transientObject
	 */
	void update(T transientObject);

	/**
	 * 删除实体
	 * 
	 * @param persistentObject
	 */
	void delete(T persistentObject);

	/**
	 * 根据ID删除实体
	 * 
	 * @param id
	 */
	void deleteById(PK id);

	/**
	 * 从资源库中删除参数集合中所有的实体
	 * 
	 * @param collections
	 */
	void deleteAll(Collection<T> collections);

	/**
	 * 删除所有的实体
	 * 
	 * @return
	 */
	int clearAll();

	/**
	 * 根据ID集合删除实体
	 * 
	 * @param idSet
	 */
	int deleteByIdSet(Set<PK> idSet);

}